﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;

/**
 * Clase para manejar los permisos de usuario;
 */
public class PermisoUsuario : Conexion
{
    private Usuario u;

    public PermisoUsuario(Usuario usuario)
    {
        this.u  = usuario;
    }

    /**
     * Inicializa los permisos de usuario por defecto a 0
     */
    public void Inicializar()
    {
        AbrirConexion();
        IniciarTransaccion();
        SentenciaSQL = "insert into permisos_x_usuario(id_permiso, id_usuario, estado) select id_permiso, " + u.Id + ", 0  from permiso;";
        try
        {
            EjecutarComando();
            ConfirmarTransaccion();
        }
        catch (ConexionException e)
        {
            CancelarTransaccion();
            throw new ConexionException("no se pudieron crear los permisos por defecto", e);
        }
        finally
        {
            CerrarConexion();
        }
    }

    public DataSet Listar()
    {
        DataSet ds;
        AbrirConexion();
        SentenciaSQL = "select * from permisos_x_usuario natural join permiso where id_usuario = " + u.Id + ";";
        IniciarTransaccion();
        try
        {
            ds = EjecutarComandoDataSet();
            ConfirmarTransaccion();
        }
        catch (ConexionException ex)
        {
            throw new ConexionException("no se pudieron listar los permisos", ex);
        }
        finally
        {
            CerrarConexion();
        }
        return ds;
    }

    public void Actualizar(int idPermiso, int valor) {
        AbrirConexion();        
        SentenciaSQL = "update permisos_x_usuario set estado = " + valor + " where 	id_permiso = " + idPermiso + " and 	id_usuario = " + u.Id + ";";
        IniciarTransaccion();
        try
        {
            EjecutarComando();
            ConfirmarTransaccion();

        }
        catch (ConexionException e)
        {
            CancelarTransaccion();
            throw new ConexionException("no se pudo guardar el permiso", e);
        }
        finally
        {
            CerrarConexion();
        }

    }

}
